import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import seaborn as sns
df = pd.read_csv('legacy_cost_computation/table-cost-popup.csv')
df = df[df.columns[1:]]
def hosp_type(duree):
if duree == 0:
return 'Hopital de jour'
else:
return "Sejour de plus d'une journée"
def generate_placement_reason(cmu,motif):
if cmu==1:
return 'CMU'
elif motif == 1:
return 'AME'
elif motif == 4:
return 'SUV'
else:
return 'Autre'
if 0:
print('ok')
def generate_severiy(ghm2):
try:
if int(ghm2[-1]):
return ghm2[-1]
except:
return 'Pas de niveau de sévérité'
def generate_ghm_root(ghm2):
return ghm2[:-1]
df['raison'] = df[['cmu','motif']].apply(lambda x: generate_placement_reason(x.cmu,x.motif),axis=1)
df['hp_type'] = df['duree'].apply(hosp_type)
df['severity'] = df['ghm2'].apply(generate_severiy)
df['ghm_racine'] = df['ghm2'].apply(generate_ghm_root)
df.head()
| finess | mois | annee | sexe | ghm2 | GHS | age | duree | supp_rea | supp_si | ... | nbActe | nbRum | cmu | motif | dp | cost | raison | hp_type | severity | ghm_racine | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10007987 | 12 | 2011 | 1 | 20Z041 | 7267 | 44 | 8 | 0 | 0 | ... | 0 | 1 | 1.0 | NaN | Z502 | 2977.721930 | CMU | Sejour de plus d'une journée | 1 | 20Z04 |
| 1 | 10007987 | 8 | 2011 | 1 | 20Z041 | 7267 | 38 | 7 | 0 | 0 | ... | 0 | 1 | 1.0 | NaN | Z502 | 2671.513527 | CMU | Sejour de plus d'une journée | 1 | 20Z04 |
| 2 | 10007987 | 12 | 2011 | 1 | 20Z041 | 7267 | 42 | 6 | 0 | 0 | ... | 0 | 1 | 1.0 | NaN | Z502 | 2365.305124 | CMU | Sejour de plus d'une journée | 1 | 20Z04 |
| 3 | 10007987 | 9 | 2011 | 2 | 20Z041 | 7267 | 27 | 7 | 0 | 0 | ... | 0 | 1 | 1.0 | NaN | Z502 | 2671.513527 | CMU | Sejour de plus d'une journée | 1 | 20Z04 |
| 4 | 10007987 | 8 | 2011 | 1 | 20Z041 | 7267 | 43 | 6 | 0 | 0 | ... | 0 | 1 | 1.0 | NaN | Z502 | 2365.305124 | CMU | Sejour de plus d'une journée | 1 | 20Z04 |
5 rows × 28 columns
g = sns.countplot(
data = df,
y='raison',
palette='magma'
)
df = df[df['raison']!='Autre']
df.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 8033831 entries, 0 to 8088413 Data columns (total 28 columns): # Column Dtype --- ------ ----- 0 finess object 1 mois int64 2 annee int64 3 sexe object 4 ghm2 object 5 GHS object 6 age int64 7 duree int64 8 supp_rea int64 9 supp_si int64 10 supp_stf int64 11 supp_src int64 12 supp_nn1 int64 13 supp_nn2 int64 14 supp_nn3 int64 15 supp_rep int64 16 ano_date int64 17 anonyme object 18 nbActe int64 19 nbRum int64 20 cmu object 21 motif float64 22 dp object 23 cost float64 24 raison object 25 hp_type object 26 severity object 27 ghm_racine object dtypes: float64(2), int64(15), object(11) memory usage: 1.7+ GB
df.describe()
| mois | annee | age | duree | supp_rea | supp_si | supp_stf | supp_src | supp_nn1 | supp_nn2 | supp_nn3 | supp_rep | ano_date | nbActe | nbRum | motif | cost | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 8.033831e+06 | 1.120718e+06 | 7.953033e+06 |
| mean | 6.519056e+00 | 2.016105e+03 | 3.558654e+01 | 3.217029e+00 | 1.018600e-01 | 1.553306e-02 | 1.065889e-01 | 8.940131e-02 | 4.394267e-02 | 2.170285e-02 | 1.495389e-02 | 1.555634e-02 | 2.598752e+04 | 3.460594e+00 | 1.165683e+00 | 1.403656e+00 | 2.411788e+03 |
| std | 3.465981e+00 | 2.886842e+00 | 2.179799e+01 | 7.895841e+00 | 1.873339e+00 | 4.662944e-01 | 1.578526e+00 | 1.492066e+00 | 9.679418e-01 | 7.683287e-01 | 7.572984e-01 | 7.318548e-01 | 1.642741e+03 | 1.243548e+01 | 5.317326e-01 | 1.195016e+00 | 5.313667e+03 |
| min | 1.000000e+00 | 2.011000e+03 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 2.131900e+04 | 0.000000e+00 | 1.000000e+00 | 1.000000e+00 | 7.297736e+01 |
| 25% | 3.000000e+00 | 2.014000e+03 | 1.900000e+01 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 2.483400e+04 | 1.000000e+00 | 1.000000e+00 | 1.000000e+00 | 7.326217e+02 |
| 50% | 7.000000e+00 | 2.016000e+03 | 3.600000e+01 | 1.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 2.598500e+04 | 2.000000e+00 | 1.000000e+00 | 1.000000e+00 | 1.203485e+03 |
| 75% | 1.000000e+01 | 2.019000e+03 | 5.300000e+01 | 4.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 0.000000e+00 | 2.719500e+04 | 4.000000e+00 | 1.000000e+00 | 1.000000e+00 | 2.384671e+03 |
| max | 1.200000e+01 | 2.020000e+03 | 1.330000e+02 | 1.645000e+03 | 8.900000e+02 | 3.640000e+02 | 4.260000e+02 | 7.120000e+02 | 2.040000e+02 | 2.310000e+02 | 3.380000e+02 | 4.100000e+02 | 2.958500e+04 | 2.057000e+03 | 9.000000e+01 | 9.000000e+00 | 1.026705e+06 |
Fichier National Des Etablissements Sanitaires et Sociaux
*A chaque établissement et à chaque entité juridique est attribué un numéro FINESS à 9 caractères dont les 2 premiers correspondent au numéro du département d'implantation :
Pour tous les départements d'outre-mer, les deux premiers caractères sont 97 et le quatrième caractère, dans ce cas précise le département 1 Guadeloupe, 2 Martinique, 3 Guyane et 4 Réunion. Pour Saint Pierre et Miquelon les deux premiers caractères sont 97 et le quatrième caractère est le 5. Pour Mayotte, les deux premiers caractères sont 98.*
def finess_departement_extractor(fin_id):
fin_id = str(fin_id)
if fin_id[:2] == '98':
return '976' #mayotte
elif fin_id[:2] == '97':
return fin_id[:2] + fin_id[3]
else:
return fin_id[:2]
df['finess'].nunique()
943
Il y'a 943 établissements de santé uniques référencés dans la base de travail
def extract_geo_repartition(df,subgroup=None):
if subgroup == 'cmu':
finess_dep = df[df['cmu']==1]['finess'].apply(finess_departement_extractor)
elif subgroup == 'ame':
finess_dep = df[df['motif']==1]['finess'].apply(finess_departement_extractor)
elif subgroup == 'suv':
finess_dep = df[df['motif']==4]['finess'].apply(finess_departement_extractor)
else:
print('No such group')
fin_dep_count = finess_dep.value_counts()
fin_dep_count = pd.DataFrame(fin_dep_count)
fin_dep_count.columns = ['#ES']
total_sejours = fin_dep_count['#ES'].sum() #dans la categorie si precisée
fin_dep_count['% de la totalité des sejours {}'.format(subgroup)] = round(fin_dep_count['#ES']/total_sejours*100,2)
return fin_dep_count
df['departement'] = df['finess'].apply(finess_departement_extractor)
finess_dep = df['finess'].apply(finess_departement_extractor)
fin_dep_count = finess_dep.value_counts()
len(finess_dep) - sum(finess_dep.notna())
0
finess_dep.unique()
array(['10', '20', '30', '40', '50', '60', '70', '80', '59', '90', '11',
'12', '13', '61', '62', '14', '15', '16', '63', '64', '17', '18',
'19', '21', '65', '66', '22', '23', '24', '25', '67', '26', '27',
'68', '28', '29', '2A', '2B', '69', '31', '32', '33', '71', '72',
'34', '73', '74', '35', '75', '36', '37', '38', '39', '41', '76',
'42', '43', '44', '77', '78', '45', '79', '46', '47', '48', '49',
'51', '81', '82', '83', '52', '53', '54', '84', '85', '55', '56',
'86', '57', '58', '87', '88', '89', '91', '92', '93', '94', '95',
'971', '972', '973', '974', '976'], dtype=object)
import fiona
import geopandas as gpd
import matplotlib.pyplot as plt
filename = "analysis_ressources/departements.geojson"
file = open(filename)
dep = gpd.read_file(file)
fin_dep_count = pd.DataFrame(fin_dep_count)
fin_dep_count.columns = ['#ES']
total_sejours = len(df)
fin_dep_count['% de la totalité des sejours'] = round(fin_dep_count['#ES']/total_sejours*100,2)
fin_dep_count
| #ES | % de la totalité des sejours | |
|---|---|---|
| 75 | 980951 | 12.21 |
| 59 | 514387 | 6.40 |
| 13 | 406646 | 5.06 |
| 974 | 365026 | 4.54 |
| 62 | 256692 | 3.20 |
| ... | ... | ... |
| 53 | 5953 | 0.07 |
| 48 | 4536 | 0.06 |
| 82 | 4453 | 0.06 |
| 15 | 3883 | 0.05 |
| 23 | 2998 | 0.04 |
93 rows × 2 columns
sns.barplot(x=fin_dep_count.index[:10],y=fin_dep_count['% de la totalité des sejours'][:10])
<AxesSubplot:ylabel='% de la totalité des sejours'>


cmu = extract_geo_repartition(df,subgroup='cmu')
suv = extract_geo_repartition(df,subgroup='suv')
ame = extract_geo_repartition(df,subgroup='ame')
sns.barplot(x=cmu.index[:10],y=cmu['% de la totalité des sejours cmu'][:10])
<AxesSubplot:ylabel='% de la totalité des sejours cmu'>

sns.barplot(x=suv.index[:10],y=suv['% de la totalité des sejours suv'][:10])
<AxesSubplot:ylabel='% de la totalité des sejours suv'>

sns.barplot(x=ame.index[:10],y=ame['% de la totalité des sejours ame'][:10])
<AxesSubplot:ylabel='% de la totalité des sejours ame'>

def rename_unnamed(df, label=''):
for i, cols in enumerate(df.columns.levels):
cols = cols.tolist()
for k, col in enumerate(cols):
if 'Unnamed' in col:
cols[k] = ' '*k
df.columns.set_levels(cols,level=i,inplace=True)
enc_mco = pd.read_excel("analysis_ressources/ENC_MCO/ENC_MCO_2018.xlsx",
header=[0,1],
index_col=[0,1])
enc_mco.columns = enc_mco.columns.droplevel()
enc_mco_racine = enc_mco[enc_mco['GHM V2020'] == 'TOTAL']
enc_mco_racine = enc_mco_racine[['racine','Libellé GHM']]
enc_mco_racine.columns = ['racine','Libellé GHM Racine']
enc_mco_racine
| racine | Libellé GHM Racine | ||
|---|---|---|---|
| 0101C01C03TOTAL | 01 | 01C03 | Craniotomies pour traumatisme, âge supérieur à... |
| 0101C01C04TOTAL | 01 | 01C04 | Craniotomies en dehors de tout traumatisme, âg... |
| 0101C01C05TOTAL | 01 | 01C05 | Interventions sur le rachis et la moelle pour ... |
| 0101C01C06TOTAL | 01 | 01C06 | Interventions sur le système vasculaire précér... |
| 0101C01C08TOTAL | 01 | 01C08 | Interventions sur les nerfs crâniens ou périph... |
| ... | ... | ... | ... |
| 2828Z28Z24TOTAL | 28 | 28Z24 | Techniques complexes d'irradiation externe san... |
| 2828Z28Z25TOTAL | 28 | 28Z25 | Autres techniques d'irradiation externe, en sé... |
| 2828ZTOTALTOTAL | 28 | TOTAL | Séances - Groupes indifférenciés |
| 28TOTALTOTALTOTAL | 28 | TOTAL | Séances |
| TOTALTOTALTOTALTOTAL | TOTAL | TOTAL | NaN |
748 rows × 2 columns
df = pd.merge(df,enc_mco[['GHM V2020','Libellé GHM']],how='inner',left_on='ghm2',right_on='GHM V2020')
df = pd.merge(df,enc_mco_racine,how='inner',left_on='ghm_racine',right_on='racine')
df.sample(50)
| finess | mois | annee | sexe | ghm2 | GHS | age | duree | supp_rea | supp_si | ... | cost | raison | hp_type | severity | ghm_racine | departement | GHM V2020 | Libellé GHM | racine | Libellé GHM Racine | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200894 | 940110018 | 10 | 2011 | 1 | 23M20T | 7989 | 17 | 0 | 0 | 0 | ... | 757.996600 | CMU | Hopital de jour | Pas de niveau de sévérité | 23M20 | 94 | 23M20T | Autres symptômes et motifs de recours aux soin... | 23M20 | Autres symptômes et motifs de recours aux soin... |
| 6481075 | 620100651 | 1 | 2011 | 2 | 19M131 | 7094 | 14 | 4 | 0 | 0 | ... | 1869.137420 | CMU | Sejour de plus d'une journée | 1 | 19M13 | 62 | 19M131 | Autres troubles de la personnalité et du\ncomp... | 19M13 | Autres troubles de la personnalité et du\ncomp... |
| 4063145 | 120780069 | 1 | 2013 | 1 | 03K02J | 819 | 17 | 0 | 0 | 0 | ... | 1331.954000 | CMU | Hopital de jour | Pas de niveau de sévérité | 03K02 | 12 | 03K02J | Affections de la bouche et des dents avec cert... | 03K02 | Affections de la bouche et des dents avec cert... |
| 3494402 | 740781133 | 3 | 2017 | 1 | 05M062 | 1739 | 66 | 5 | 0 | 0 | ... | 2521.142000 | CMU | Sejour de plus d'une journée | 2 | 05M06 | 74 | 05M062 | Angine de poitrine, niveau 2 | 05M06 | Angine de poitrine |
| 5578814 | 770170017 | 6 | 2015 | 2 | 05M122 | 1768 | 52 | 8 | 0 | 0 | ... | 3568.996000 | CMU | Sejour de plus d'une journée | 2 | 05M12 | 77 | 05M122 | Troubles vasculaires périphériques, niveau 2 | 05M12 | Troubles vasculaires périphériques |
| 4498211 | 490000031 | 11 | 2020 | 2 | 28Z04Z | 9605 | 84 | 0 | 0 | 0 | ... | 318.771300 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z04 | 49 | 28Z04Z | Hémodialyse, en séances | 28Z04 | Hémodialyse, en séances |
| 3028847 | 750712184 | 2 | 2014 | 1 | 06C121 | 1969 | 33 | 2 | 0 | 0 | ... | 2025.442000 | AME | Sejour de plus d'une journée | 1 | 06C12 | 75 | 06C121 | Interventions réparatrices pour hernies inguin... | 06C12 | Interventions réparatrices pour hernies inguin... |
| 3165437 | 220000020 | 3 | 2014 | 1 | 01M25T | 0294 | 34 | 1 | 0 | 0 | ... | 793.741400 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 01M25 | 22 | 01M25T | Epilepsie, âge supérieur à 17 ans, très courte... | 01M25 | Epilepsie, âge supérieur à 17 ans |
| 1049241 | 760780239 | 2 | 2019 | 2 | 06M02T | 2128 | 0 | 0 | 0 | 0 | ... | 678.259700 | CMU | Hopital de jour | Pas de niveau de sévérité | 06M02 | 76 | 06M02T | Autres gastroentérites et maladies diverses du... | 06M02 | Autres gastroentérites et maladies diverses du... |
| 5778336 | 290000751 | 8 | 2020 | 1 | 20Z021 | 7258 | 29 | 10 | 0 | 0 | ... | 3666.742000 | CMU | Sejour de plus d'une journée | 1 | 20Z02 | 29 | 20Z021 | Toxicomanies non éthyliques avec dépendance,\n... | 20Z02 | Toxicomanies non éthyliques avec dépendance |
| 6848941 | 540001286 | 8 | 2014 | 1 | 28Z18Z | 9622 | 48 | 0 | 0 | 0 | ... | 172.792100 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z18 | 54 | 28Z18Z | Radiothérapie conformationnelle avec modulatio... | 28Z18 | Radiothérapie conformationnelle avec modulatio... |
| 7178339 | 590782421 | 10 | 2015 | 2 | 14M03T | 5481 | 37 | 0 | 0 | 0 | ... | 555.236800 | CMU | Hopital de jour | Pas de niveau de sévérité | 14M03 | 59 | 14M03T | Affections de l'ante partum sans intervention\... | 14M03 | Affections de l'ante partum sans intervention\... |
| 5833703 | 950110049 | 9 | 2011 | 2 | 28Z14Z | 9613 | 14 | 0 | 0 | 0 | ... | 910.283700 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z14 | 95 | 28Z14Z | Transfusions, en séances | 28Z14 | Transfusions, en séances |
| 3800028 | 590780193 | 7 | 2020 | 1 | 06K02Z | 2119 | 57 | 0 | 0 | 0 | ... | 1175.584000 | CMU | Hopital de jour | Pas de niveau de sévérité | 06K02 | 59 | 06K02Z | Endoscopies digestives thérapeutiques et anest... | 06K02 | Endoscopies digestives thérapeutiques et anest... |
| 2506295 | 750712184 | 5 | 2019 | 1 | 10M151 | 3952 | 0 | 2 | 0 | 0 | ... | 1344.924000 | CMU | Sejour de plus d'une journée | 1 | 10M15 | 75 | 10M151 | Troubles métaboliques, âge inférieur à 18 ans,... | 10M15 | Troubles métaboliques, âge inférieur à 18 ans |
| 6009584 | 980500003 | 12 | 2013 | 1 | 16M161 | 6199 | 12 | 6 | 0 | 0 | ... | 3603.575000 | SUV | Sejour de plus d'une journée | 1 | 16M16 | 976 | 16M161 | Troubles sévères de la lignée érythrocytaire, ... | 16M16 | Troubles sévères de la lignée érythrocytaire, ... |
| 4460711 | 740781133 | 9 | 2020 | 1 | 28Z04Z | 9605 | 53 | 0 | 0 | 0 | ... | 318.771300 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z04 | 74 | 28Z04Z | Hémodialyse, en séances | 28Z04 | Hémodialyse, en séances |
| 7059009 | 750712184 | 1 | 2016 | 2 | 03C192 | 684 | 19 | 5 | 0 | 0 | ... | 6403.109000 | CMU | Sejour de plus d'une journée | 2 | 03C19 | 75 | 03C192 | Ostéotomies de la face, niveau 2 | 03C19 | Ostéotomies de la face |
| 978632 | 590783239 | 5 | 2016 | 1 | 06M021 | 2124 | 1 | 7 | 0 | 0 | ... | 4157.664000 | CMU | Sejour de plus d'une journée | 1 | 06M02 | 59 | 06M021 | Autres gastroentérites et maladies diverses du... | 06M02 | Autres gastroentérites et maladies diverses du... |
| 3212530 | 350000048 | 10 | 2017 | 2 | 07M02T | 2518 | 42 | 1 | 0 | 0 | ... | 760.659500 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 07M02 | 35 | 07M02T | Affections des voies biliaires, très courte durée | 07M02 | Affections des voies biliaires |
| 5799300 | 890970569 | 5 | 2018 | 1 | 04M091 | 1161 | 66 | 7 | 0 | 0 | ... | 4195.098000 | CMU | Sejour de plus d'une journée | 1 | 04M09 | 89 | 04M091 | Tumeurs de l'appareil respiratoire, niveau 1 | 04M09 | Tumeurs de l'appareil respiratoire |
| 5648279 | 800000044 | 1 | 2012 | 2 | 03C201 | 687 | 26 | 2 | 0 | 0 | ... | 2724.548000 | CMU | Sejour de plus d'une journée | 1 | 03C20 | 80 | 03C201 | Interventions de reconstruction de l'oreille m... | 03C20 | Interventions de reconstruction de l'oreille m... |
| 6830265 | 340000207 | 8 | 2020 | 2 | 28Z23Z | 9631 | 45 | 0 | 0 | 0 | ... | 176.656300 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z23 | 34 | 28Z23Z | Techniques complexes d'irradiation externe ave... | 28Z23 | Techniques complexes d'irradiation externe ave... |
| 5333167 | 310781406 | 1 | 2019 | 1 | 01M241 | 0285 | 1 | 2 | 0 | 0 | ... | 1707.295000 | CMU | Sejour de plus d'une journée | 1 | 01M24 | 31 | 01M241 | Epilepsie, âge inférieur à 18 ans, niveau 1 | 01M24 | Epilepsie, âge inférieur à 18 ans |
| 2605263 | 730002839 | 9 | 2015 | 2 | 04M102 | 1167 | 74 | 15 | 0 | 0 | ... | 6316.779000 | CMU | Sejour de plus d'une journée | 2 | 04M10 | 73 | 04M102 | Embolies pulmonaires, niveau 2 | 04M10 | Embolies pulmonaires |
| 635888 | 810000455 | 3 | 2011 | 1 | 09M02T | 3519 | 5 | 0 | 0 | 0 | ... | 821.273150 | CMU | Hopital de jour | Pas de niveau de sévérité | 09M02 | 81 | 09M02T | Traumatismes de la peau et des tissus sous-cut... | 09M02 | Traumatismes de la peau et des tissus sous-cut... |
| 6395121 | 860780980 | 5 | 2012 | 2 | 21C051 | 7420 | 44 | 1 | 0 | 0 | ... | 1638.170000 | CMU | Sejour de plus d'une journée | 1 | 21C05 | 86 | 21C051 | Autres interventions pour blessures ou complic... | 21C05 | Autres interventions pour blessures ou complic... |
| 7509612 | 60785011 | 9 | 2019 | 2 | 14Z13A | 5490 | 21 | 4 | 0 | 0 | ... | 2635.111000 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 14Z13 | 60 | 14Z13A | Accouchements uniques par voie basse chez une\... | 14Z13 | Accouchements uniques par voie basse chez une\... |
| 1773454 | 810000331 | 7 | 2014 | 2 | 07M071 | 2529 | 44 | 9 | 0 | 0 | ... | 4097.506000 | CMU | Sejour de plus d'une journée | 1 | 07M07 | 81 | 07M071 | Cirrhoses alcooliques, niveau 1 | 07M07 | Cirrhoses alcooliques |
| 459178 | 610780090 | 10 | 2018 | 2 | 06M031 | 2129 | 63 | 5 | 0 | 0 | ... | 2458.604000 | CMU | Sejour de plus d'une journée | 1 | 06M03 | 61 | 06M031 | Autres gastroentérites et maladies diverses du... | 06M03 | Autres gastroentérites et maladies diverses du... |
| 6775216 | 630000479 | 11 | 2013 | 1 | 28Z23Z | 9631 | 34 | 0 | 0 | 0 | ... | 176.656300 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z23 | 63 | 28Z23Z | Techniques complexes d'irradiation externe ave... | 28Z23 | Techniques complexes d'irradiation externe ave... |
| 3753919 | 620101360 | 11 | 2016 | 2 | 06C132 | 1975 | 51 | 4 | 0 | 1 | ... | 3709.710000 | CMU | Sejour de plus d'une journée | 2 | 06C13 | 62 | 06C132 | Libérations d'adhérences péritonéales, niveau 2 | 06C13 | Libérations d'adhérences péritonéales |
| 92785 | 760780239 | 7 | 2013 | 1 | 20Z04T | 7271 | 44 | 0 | 0 | 0 | ... | 468.104900 | CMU | Hopital de jour | Pas de niveau de sévérité | 20Z04 | 76 | 20Z04T | Ethylisme avec dépendance, très courte durée | 20Z04 | Ethylisme avec dépendance |
| 3467606 | 680020336 | 11 | 2017 | 1 | 04M121 | 1175 | 52 | 6 | 0 | 0 | ... | 2879.984000 | CMU | Sejour de plus d'une journée | 1 | 04M12 | 68 | 04M121 | Pneumothorax, niveau 1 | 04M12 | Pneumothorax |
| 6726883 | 300780038 | 6 | 2011 | 1 | 28Z24Z | 9632 | 39 | 0 | 0 | 0 | ... | 89.004605 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z24 | 30 | 28Z24Z | Techniques complexes d'irradiation externe san... | 28Z24 | Techniques complexes d'irradiation externe san... |
| 5345478 | 590783239 | 2 | 2018 | 2 | 01M24T | 289 | 7 | 1 | 0 | 0 | ... | 958.862700 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 01M24 | 59 | 01M24T | Epilepsie, âge inférieur à 18 ans, très courte... | 01M24 | Epilepsie, âge inférieur à 18 ans |
| 5433196 | 590782637 | 12 | 2012 | 1 | 04M131 | 1180 | 47 | 2 | 0 | 0 | ... | 930.216300 | CMU | Sejour de plus d'une journée | 1 | 04M13 | 59 | 04M131 | Oedème pulmonaire et détresse respiratoire, ni... | 04M13 | Oedème pulmonaire et détresse respiratoire |
| 2606919 | 780110078 | 4 | 2019 | 2 | 04M102 | 1167 | 42 | 5 | 0 | 0 | ... | 2494.121000 | CMU | Sejour de plus d'une journée | 2 | 04M10 | 78 | 04M102 | Embolies pulmonaires, niveau 2 | 04M10 | Embolies pulmonaires |
| 5480343 | 440000289 | 11 | 2017 | 1 | 02M081 | 0529 | 25 | 1 | 0 | 0 | ... | 755.169200 | CMU | Sejour de plus d'une journée | 1 | 02M08 | 44 | 02M081 | Autres affections oculaires d'origine non diab... | 02M08 | Autres affections oculaires d'origine non diab... |
| 3158865 | 970403606 | 8 | 2011 | 1 | 01M25T | 294 | 32 | 1 | 0 | 0 | ... | 793.741400 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 01M25 | 974 | 01M25T | Epilepsie, âge supérieur à 17 ans, très courte... | 01M25 | Epilepsie, âge supérieur à 17 ans |
| 792975 | 760780726 | 1 | 2015 | 2 | 20Z051 | 7272 | 24 | 0 | 0 | 0 | ... | 634.409200 | CMU | Hopital de jour | 1 | 20Z05 | 76 | 20Z051 | Ethylisme aigu, niveau 1 | 20Z05 | Ethylisme aigu |
| 2779170 | 130786049 | 6 | 2013 | 2 | 28Z17Z | 9616 | 58 | 0 | 0 | 0 | ... | 1929.860000 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z17 | 13 | 28Z17Z | Chimiothérapie pour affection non tumorale, en... | 28Z17 | Chimiothérapie pour affection non tumorale, en... |
| 585761 | 250000015 | 11 | 2013 | 2 | 03M03T | 0875 | 0 | 1 | 0 | 0 | ... | 687.536500 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 03M03 | 25 | 03M03T | Otites moyennes et autres infections des voies... | 03M03 | Otites moyennes et autres infections des voies... |
| 7593712 | 310781406 | 12 | 2013 | 2 | 14C08A | 5326 | 22 | 6 | 0 | 0 | ... | 4177.964000 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 14C08 | 31 | 14C08A | Césariennes pour grossesse unique, sans\ncompl... | 14C08 | Césariennes pour grossesse unique |
| 6923987 | 490000155 | 2 | 2020 | 2 | 28Z18Z | 9625 | 61 | 0 | 0 | 0 | ... | 172.792100 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z18 | 49 | 28Z18Z | Radiothérapie conformationnelle avec modulatio... | 28Z18 | Radiothérapie conformationnelle avec modulatio... |
| 7691934 | 630780989 | 4 | 2019 | 2 | 15M05A | 5903 | 0 | 4 | 0 | 0 | ... | 1223.921000 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 15M05 | 63 | 15M05A | Nouveau-nés de 3300g et âge gestationnel de 40... | 15M05 | Nouveau-nés de 3300g et âge gestationnel de 40... |
| 1415209 | 500000013 | 7 | 2018 | 1 | 12C08J | 4540 | 4 | 0 | 0 | 0 | ... | 938.526400 | AME | Hopital de jour | Pas de niveau de sévérité | 12C08 | 50 | 12C08J | Circoncision, en ambulatoire | 12C08 | Circoncision |
| 5359656 | 760780239 | 6 | 2017 | 1 | 08C221 | 2779 | 43 | 4 | 0 | 0 | ... | 5812.963000 | CMU | Sejour de plus d'une journée | 1 | 08C22 | 76 | 08C221 | Interventions pour reprise de prothèses articu... | 08C22 | Interventions pour reprise de prothèses articu... |
| 3667357 | 670780055 | 7 | 2017 | 1 | 01M11T | 0237 | 51 | 0 | 0 | 0 | ... | 764.441300 | CMU | Hopital de jour | Pas de niveau de sévérité | 01M11 | 67 | 01M11T | Affections des nerfs crâniens et rachidiens, t... | 01M11 | Affections des nerfs crâniens et rachidiens |
| 1006996 | 310781406 | 1 | 2012 | 2 | 06M02T | 2128 | 1 | 1 | 0 | 0 | ... | 678.259700 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 06M02 | 31 | 06M02T | Autres gastroentérites et maladies diverses du... | 06M02 | Autres gastroentérites et maladies diverses du... |
50 rows × 33 columns
#df = df[['finess','mois','annee','sexe','ghm2','age','duree','supp_rea','motif','dp','cost','raison','hp_type',
# 'severity','Libellé GHM','Libellé GHM Racine', 'ano_date', 'anonyme', 'nbActe', 'nbRum','departement', 'GHM V2020']]
df.sample(7000000).to_csv('pmsi_processed.csv')
pd.read_csv("psmi_processed.csv")
| Unnamed: 0 | finess | mois | annee | sexe | ghm2 | GHS | age | duree | supp_rea | ... | cost | raison | hp_type | severity | ghm_racine | departement | GHM V2020 | Libellé GHM | racine | Libellé GHM Racine | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 6103384 | 670000082 | 11 | 2015 | 2 | 10M13T | 3982 | 67 | 0 | 0 | ... | 762.622500 | CMU | Hopital de jour | Pas de niveau de sévérité | 10M13 | 67 | 10M13T | Explorations et surveillance pour affections\n... | 10M13 | Explorations et surveillance pour affections\n... |
| 1 | 4309329 | 590782421 | 5 | 2018 | 2 | 28Z04Z | 9605 | 39 | 0 | 0 | ... | 318.771300 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z04 | 59 | 28Z04Z | Hémodialyse, en séances | 28Z04 | Hémodialyse, en séances |
| 2 | 1705401 | 620100685 | 12 | 2017 | 2 | 09C10J | 3357 | 2 | 0 | 0 | ... | 1012.401000 | CMU | Hopital de jour | Pas de niveau de sévérité | 09C10 | 62 | 09C10J | Autres interventions sur la peau, les tissus\n... | 09C10 | Autres interventions sur la peau, les tissus\n... |
| 3 | 489703 | 590781415 | 1 | 2014 | 1 | 06M032 | 2130 | 30 | 4 | 0 | ... | 2071.503000 | CMU | Sejour de plus d'une journée | 2 | 06M03 | 59 | 06M032 | Autres gastroentérites et maladies diverses du... | 06M03 | Autres gastroentérites et maladies diverses du... |
| 4 | 2864357 | 630780989 | 7 | 2019 | 1 | 28Z17Z | 9616 | 10 | 0 | 0 | ... | 1929.860000 | CMU | Hopital de jour | Pas de niveau de sévérité | 28Z17 | 63 | 28Z17Z | Chimiothérapie pour affection non tumorale, en... | 28Z17 | Chimiothérapie pour affection non tumorale, en... |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 9995 | 528617 | 930110051 | 8 | 2020 | 1 | 08C391 | 2841 | 31 | 2 | 0 | ... | 2454.631000 | AME | Sejour de plus d'une journée | 1 | 08C39 | 93 | 08C391 | Interventions sur l'avant-bras, niveau 1 | 08C39 | Interventions sur l'avant-bras |
| 9996 | 6441927 | 210780581 | 6 | 2011 | 2 | 06M141 | 2181 | 0 | 2 | 0 | ... | 2178.545833 | CMU | Sejour de plus d'une journée | 1 | 06M14 | 21 | 06M141 | Invaginations intestinales aigües, niveau 1 | 06M14 | Invaginations intestinales aigües |
| 9997 | 5646048 | 750712184 | 5 | 2016 | 2 | 03M15Z | 873 | 46 | 3 | 0 | ... | 1848.919000 | AME | Sejour de plus d'une journée | Pas de niveau de sévérité | 03M15 | 75 | 03M15Z | Symptômes et autres recours aux soins de la CM... | 03M15 | Symptômes et autres recours aux soins de la CM... |
| 9998 | 5270053 | 970403606 | 9 | 2015 | 1 | 04M203 | 1216 | 65 | 7 | 0 | ... | 3239.548000 | CMU | Sejour de plus d'une journée | 3 | 04M20 | 974 | 04M203 | Bronchopneumopathies chroniques surinfectées,\... | 04M20 | Bronchopneumopathies chroniques surinfectées |
| 9999 | 3087367 | 380780080 | 12 | 2015 | 2 | 13M04T | 5219 | 22 | 1 | 0 | ... | 751.527600 | CMU | Sejour de plus d'une journée | Pas de niveau de sévérité | 13M04 | 38 | 13M04T | Autres affections de l'appareil génital fémini... | 13M04 | Autres affections de l'appareil génital féminin |
10000 rows × 34 columns
df['ghm2'].nunique()
2698
list(df['Libellé GHM'].value_counts().index[:10])
['Hémodialyse, en séances', 'Chimiothérapie pour tumeur, en séances', 'Ethylisme aigu, niveau 1', 'Chimiothérapie pour affection non tumorale, en\nséances', 'Accouchements uniques par voie basse chez une\nmultipare, sans complication significative', 'Interruptions volontaires de grossesse : séjours de\nmoins de 3 jours', 'Endoscopie digestive diagnostique et anesthésie, en\nambulatoire', "Radiothérapie conformationnelle avec modulation\nd'intensité, en séances", 'Autres symptômes et motifs de recours aux soins de\nla CMD 23, très courte durée', 'Effets toxiques des médicaments et substances\nbiologiques, âge supérieur à 17 ans, très courte durée']

df_raison_ghm = df.groupby(['raison','ghm2']).agg({'ghm2':'count'})
df_raison_ghm.columns = ['GHM ( % sur la procédure)']
df_raison_ghm = df_raison_ghm.groupby(level=0).apply(lambda x: x/x.sum() * 100)
df_raison_ghm = df_raison_ghm.reset_index()
df_raison_ghm = pd.merge(df_raison_ghm,enc_mco[['GHM V2020','Libellé GHM']],how='left',left_on='ghm2',right_on='GHM V2020')
top_10_ghm = list(df['ghm2'].value_counts().index[:10])
df_raison_ghm[df_raison_ghm['ghm2'].isin(top_10_ghm)]
| raison | ghm2 | GHM ( % sur la procédure) | GHM V2020 | Libellé GHM | |
|---|---|---|---|---|---|
| 887 | AME | 06K04J | 0.824480 | 06K04J | Endoscopie digestive diagnostique et anesthési... |
| 1995 | AME | 14Z08Z | 3.531560 | 14Z08Z | Interruptions volontaires de grossesse : séjou... |
| 2009 | AME | 14Z14A | 4.278330 | 14Z14A | Accouchements uniques par voie basse chez une\... |
| 2375 | AME | 20Z051 | 0.654764 | 20Z051 | Ethylisme aigu, niveau 1 |
| 2433 | AME | 21M10T | 0.178702 | 21M10T | Effets toxiques des médicaments et substances\... |
| 2519 | AME | 23M20T | 0.639855 | 23M20T | Autres symptômes et motifs de recours aux soin... |
| 2572 | AME | 28Z04Z | 14.598115 | 28Z04Z | Hémodialyse, en séances |
| 2573 | AME | 28Z07Z | 6.895038 | 28Z07Z | Chimiothérapie pour tumeur, en séances |
| 2583 | AME | 28Z17Z | 1.962658 | 28Z17Z | Chimiothérapie pour affection non tumorale, en... |
| 2584 | AME | 28Z18Z | 2.268494 | 28Z18Z | Radiothérapie conformationnelle avec modulatio... |
| 3520 | CMU | 06K04J | 1.372230 | 06K04J | Endoscopie digestive diagnostique et anesthési... |
| 4668 | CMU | 14Z08Z | 1.406039 | 14Z08Z | Interruptions volontaires de grossesse : séjou... |
| 4682 | CMU | 14Z14A | 1.264299 | 14Z14A | Accouchements uniques par voie basse chez une\... |
| 5059 | CMU | 20Z051 | 2.482044 | 20Z051 | Ethylisme aigu, niveau 1 |
| 5122 | CMU | 21M10T | 1.110809 | 21M10T | Effets toxiques des médicaments et substances\... |
| 5208 | CMU | 23M20T | 1.065797 | 23M20T | Autres symptômes et motifs de recours aux soin... |
| 5266 | CMU | 28Z04Z | 3.594481 | 28Z04Z | Hémodialyse, en séances |
| 5267 | CMU | 28Z07Z | 3.273934 | 28Z07Z | Chimiothérapie pour tumeur, en séances |
| 5277 | CMU | 28Z17Z | 2.020967 | 28Z17Z | Chimiothérapie pour affection non tumorale, en... |
| 5278 | CMU | 28Z18Z | 1.074938 | 28Z18Z | Radiothérapie conformationnelle avec modulatio... |
| 6039 | SUV | 06K04J | 0.152602 | 06K04J | Endoscopie digestive diagnostique et anesthési... |
| 6976 | SUV | 14Z08Z | 1.062314 | 14Z08Z | Interruptions volontaires de grossesse : séjou... |
| 6990 | SUV | 14Z14A | 5.250023 | 14Z14A | Accouchements uniques par voie basse chez une\... |
| 7303 | SUV | 20Z051 | 1.087607 | 20Z051 | Ethylisme aigu, niveau 1 |
| 7351 | SUV | 21M10T | 0.171994 | 21M10T | Effets toxiques des médicaments et substances\... |
| 7428 | SUV | 23M20T | 0.514295 | 23M20T | Autres symptômes et motifs de recours aux soin... |
| 7459 | SUV | 28Z04Z | 13.054659 | 28Z04Z | Hémodialyse, en séances |
| 7460 | SUV | 28Z07Z | 3.315094 | 28Z07Z | Chimiothérapie pour tumeur, en séances |
| 7465 | SUV | 28Z17Z | 0.943436 | 28Z17Z | Chimiothérapie pour affection non tumorale, en... |
| 7466 | SUV | 28Z18Z | 0.521040 | 28Z18Z | Radiothérapie conformationnelle avec modulatio... |
sns.catplot(data=df_raison_ghm[df_raison_ghm['ghm2'].isin(top_10_ghm)],
kind='bar',
x='raison',
y="GHM ( % sur la procédure)",
hue='Libellé GHM',
palette='Set2'
)
<seaborn.axisgrid.FacetGrid at 0x163ebcf87f0>
top_10_ghm_suv = list(df[df['raison']=='SUV']['ghm2'].value_counts().index[:10])
top_10_ghm_ame = list(df[df['raison']=='AME']['ghm2'].value_counts().index[:10])
top_10_ghm_cmu = list(df[df['raison']=='CMU']['ghm2'].value_counts().index[:10])
top_10_ghm_autre = list(df[df['raison']=='Autre']['ghm2'].value_counts().index[:10])
def plot_top_ghm(df,raison,top_data):
sns.catplot(data=df[(df['ghm2'].isin(top_data)) & (df['raison']==raison)],
kind='bar',
x='raison',
y="GHM ( % sur la procédure)",
hue='Libellé GHM',
palette='Paired'
)
plot_top_ghm(df_raison_ghm,'SUV',top_10_ghm_suv)
plot_top_ghm(df_raison_ghm,'AME',top_10_ghm_ame)
plot_top_ghm(df_raison_ghm,'CMU',top_10_ghm_cmu)
df_raison_ghm = df.groupby(['raison','annee','ghm2']).agg({'ghm2':'count'})
df_raison_ghm.columns = ['GHM ( % sur la procédure)']
df_raison_ghm = df_raison_ghm.groupby(level=[0,1]).apply(lambda x: x/x.sum() * 100)
df_raison_ghm = df_raison_ghm.reset_index()
df_raison_ghm = pd.merge(df_raison_ghm,enc_mco[['GHM V2020','Libellé GHM']],how='left',left_on='ghm2',right_on='GHM V2020')
for year in df_raison_ghm['annee'].unique():
top_10_ghm = list(df[df['annee']==year]['ghm2'].value_counts().index[:10])
g= sns.catplot(data=df_raison_ghm[df_raison_ghm['annee']==year][df_raison_ghm['ghm2'].isin(top_10_ghm)],
kind='bar',
x='raison',
y="GHM ( % sur la procédure)",
hue='Libellé GHM',
palette='Set2',
)
g.set(title='Top 10 global GHM selon la procédure associée au séjour en {}'.format(year))
top_10_ghm_ame = list(df[df['raison']=='AME']['ghm2'].value_counts().index[:10])
top_10_ghm_cmu = list(df[df['raison']=='CMU']['ghm2'].value_counts().index[:10])
top_10_ghm_autre = list(df[df['raison']=='Autre']['ghm2'].value_counts().index[:10])
def plot_top_ghm(df,raison,top_data):
return sns.catplot(data=df[(df['ghm2'].isin(top_data)) & (df['raison']==raison)],
kind='bar',
x='raison',
y="GHM ( % sur la procédure)",
hue='Libellé GHM',
palette='Paired'
)
top_10_ghm_suv = list(df[(df['raison']=='SUV')]['ghm2'].value_counts().index[:10])
g= sns.catplot(data=df_raison_ghm[(df_raison_ghm['ghm2'].isin(top_10_ghm_suv)) & (df_raison_ghm['raison'] == 'SUV')],
kind='point',
x='annee',
y="GHM ( % sur la procédure)",
hue='Libellé GHM',
palette='tab10',
)
top_10_ghm_ame = list(df[(df['raison']=='AME')]['ghm2'].value_counts().index[:10])
g= sns.catplot(data=df_raison_ghm[(df_raison_ghm['ghm2'].isin(top_10_ghm_ame)) & (df_raison_ghm['raison'] == 'AME')],
kind='point',
x='annee',
y="GHM ( % sur la procédure)",
hue='Libellé GHM',
palette='tab10',
)
top_10_ghm_cmu = list(df[(df['raison']=='CMU')]['ghm2'].value_counts().index[:10])
g= sns.catplot(data=df_raison_ghm[(df_raison_ghm['ghm2'].isin(top_10_ghm_cmu)) & (df_raison_ghm['raison'] == 'CMU')],
kind='point',
x='annee',
y="GHM ( % sur la procédure)",
hue='Libellé GHM',
palette='tab10',
)
import plotly.graph_objects as go
df_raison_ghm = df.groupby(['raison','annee','mois','ghm2']).agg({'ghm2':'count'})
df_raison_ghm.columns = ['GHM ( % sur la procédure)']
df_raison_ghm = df_raison_ghm.groupby(level=[0,1,2]).apply(lambda x: x/x.sum() * 100)
df_raison_ghm = df_raison_ghm.reset_index()
df_raison_ghm = pd.merge(df_raison_ghm,enc_mco[['GHM V2020','Libellé GHM']],how='left',left_on='ghm2',right_on='GHM V2020')
top_10_ghm_suv = list(df[(df['raison']=='SUV')]['ghm2'].value_counts().index[:10])
months = ['Janvier','Fevrier','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre',
'Octobre','Novembre','Decembre']
number_months = {k+1:v for k,v in enumerate(months) }
n_df = df_raison_ghm[df_raison_ghm['raison'] == 'AME']
n_df = n_df.sort_values(by=['annee','mois'])
test = n_df.groupby(['annee','mois']).agg({'GHM ( % sur la procédure)':lambda x: max(x)})
test = test.reset_index()
test['ghm2']= n_df[n_df['GHM ( % sur la procédure)'].isin(test['GHM ( % sur la procédure)'])]['ghm2'].values
test['mois'] = test['mois'].apply(lambda x:number_months[x])
test = pd.merge(test,enc_mco[['GHM V2020','Libellé GHM']],how='left',left_on='ghm2',right_on='GHM V2020')
import plotly.express as px
month_theta = {k+1:v for k,v in enumerate(np.linspace(0,360,12)) }
fig1 = px.line_polar(test[test['annee']==2020], r="GHM ( % sur la procédure)", theta="mois", color="Libellé GHM", line_close=True,
color_discrete_sequence=px.colors.sequential.Plasma_r,
template="plotly_dark",)
fig1.show()
fig2 = px.line_polar(test[test['annee']==2019], r="GHM ( % sur la procédure)", theta="mois", color="Libellé GHM", line_close=True,
color_discrete_sequence=px.colors.sequential.Plasma_r,
template="plotly_dark",)
fig1.show()
fig2.show()
fig = go.Figure()
fig.add_trace(go.Barpolar(
r = test[test['annee']==2018]['GHM ( % sur la procédure)'],
theta=test[test['annee']==2018]['mois'],
text=test[test['annee']==2018]['Libellé GHM'],
name = '2018',
marker_color='red',
marker_line_color="red",
hoverinfo = ['all'],
opacity=0.7
))
fig.add_trace(go.Barpolar(
r = test[test['annee']==2019]['GHM ( % sur la procédure)'],
theta=test[test['annee']==2019]['mois'],
text=test[test['annee']==2019]['Libellé GHM'],
name = '2019',
marker_color='blue',
marker_line_color="blue",
hoverinfo = ['all'],
opacity=0.7
))
fig.add_trace(go.Barpolar(
r = test[test['annee']==2020]['GHM ( % sur la procédure)'],
theta=test[test['annee']==2020]['mois'],
text=test[test['annee']==2020]['Libellé GHM'],
name = '2020',
marker_color='green',
marker_line_color="green",
hoverinfo = ['all'],
opacity=0.7
))
fig.update_layout(
title='Evolution Mensuelle du GHM le plus representé au sein du SUV',
font_size=9,
legend_font_size=15,
polar_angularaxis_rotation=90,
width=500,
height=500,
polar = dict(
bgcolor = "rgb(223, 223, 223)",
angularaxis =
dict(
linewidth = 3,
showline=True,
linecolor='black'
),
radialaxis =
dict(
showline = True,
linewidth = 2,
gridcolor = "white",
gridwidth = 2,
)
),
)


